package com.spring.sunflower.data;

import com.spring.sunflower.bean.AccountBean;
import com.spring.sunflower.bean.AccountMoneyBean;
import com.spring.sunflower.bean.AnchorDetailBean;
import com.spring.sunflower.bean.AnchorGiftReceivedBean;
import com.spring.sunflower.bean.AuthCodeBean;
import com.spring.sunflower.bean.BalanceBean;
import com.spring.sunflower.bean.BannerBean;
import com.spring.sunflower.bean.BillBean;
import com.spring.sunflower.bean.BillListBean;
import com.spring.sunflower.bean.BlackHasBean;
import com.spring.sunflower.bean.BlackListBean;
import com.spring.sunflower.bean.CallRecordBean;
import com.spring.sunflower.bean.ChatGiftBean;
import com.spring.sunflower.bean.ChatPeopleBean;
import com.spring.sunflower.bean.CheckApplyFaceVerifyBean;
import com.spring.sunflower.bean.FaceAuthStatusBean;
import com.spring.sunflower.bean.FansBean;
import com.spring.sunflower.bean.CommonBean;
import com.spring.sunflower.bean.GiveGiftBean;
import com.spring.sunflower.bean.HelloBean;
import com.spring.sunflower.bean.IncomeChatBean;
import com.spring.sunflower.bean.IncomeGiftBean;
import com.spring.sunflower.bean.IncomeVideoChatBean;
import com.spring.sunflower.bean.LabelBean;
import com.spring.sunflower.bean.LatestVisitorBean;
import com.spring.sunflower.bean.LatestVisitorNumBean;
import com.spring.sunflower.bean.LiveAcceptChatBean;
import com.spring.sunflower.bean.LiveApplyChatBean;
import com.spring.sunflower.bean.LoginByAuthCodeBean;
import com.spring.sunflower.bean.NearbyBean;
import com.spring.sunflower.bean.NewGiftBagBean;
import com.spring.sunflower.bean.NewestBean;
import com.spring.sunflower.bean.PhotoListBean;
import com.spring.sunflower.bean.PhotoListReleaseBean;
import com.spring.sunflower.bean.RecommendAnchorsBean;
import com.spring.sunflower.bean.STSCertBean;
import com.spring.sunflower.bean.SignInBean;
import com.spring.sunflower.bean.TalkRepositoryBean;
import com.spring.sunflower.bean.TaskAwardDailyBean;
import com.spring.sunflower.bean.TaskAwardSignBean;
import com.spring.sunflower.bean.TaskBean;
import com.spring.sunflower.bean.UserAuthBean;
import com.spring.sunflower.bean.UserInfoUpdateBean;
import com.spring.sunflower.bean.VersionBean;
import com.spring.sunflower.bean.VideoCommentBean;
import com.spring.sunflower.bean.VideoCommentReleaseBean;
import com.spring.sunflower.bean.VideoListBean;
import com.spring.sunflower.bean.VideoPlayBean;
import com.spring.sunflower.bean.VideoShowReleaseBean;
import com.spring.sunflower.bean.VideoSubCommentBean;
import com.spring.sunflower.bean.VideoSubCommentReleaseBean;
import com.spring.sunflower.bean.WeChatH5Bean;
import com.spring.sunflower.bean.WeChatH5PayResultBean;
import com.spring.sunflower.bean.WeChatPayBean;
import com.spring.sunflower.bean.WithdrawRecordBean;

import java.util.Map;

import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.FieldMap;

/**
 * Created by Kevin on 2021/5/28<br/>
 * <p>
 * Describe:<br/>
 */
public interface RemoteDataSource {
    /**
     * 获取验证码
     *
     * @param phoneNum
     * @param type
     * @return
     */
    Observable<AuthCodeBean> requestAuthCode(String phoneNum, String type);

    /**
     * 根据验证码登录
     *
     * @param phoneNum
     * @param authCode
     * @return
     */
    Observable<LoginByAuthCodeBean> loginByAuthCode(String phoneNum, String authCode);

    Observable<LoginByAuthCodeBean> loginByToken(String userID, String token);

    Observable<LoginByAuthCodeBean> loginByOneKey(String userID, String token);

    Observable<LoginByAuthCodeBean> loginByDevice();

    /**
     * 注册
     *
     * @param gender 性别 1是男2是女
     * @param hobby  爱好传id,多个id用逗号分开
     * @return
     */
    Observable<LoginByAuthCodeBean> register(String gender, String hobby, String nickname);

    /**
     * @param pageIndex
     * @return
     */
    Observable<RecommendAnchorsBean> requestRecommendAnchorsFruit(int pageIndex);

    Observable<RecommendAnchorsBean> requestRecommendAnchors(int pageIndex, String labelId);

    Observable<BannerBean> requestBanner();

    Observable<NearbyBean> requestNearby(int pageIndex);

    Observable<NewestBean> requestNewest(int pageIndex);

    Observable<FaceAuthStatusBean> requestFaceAuthStatus();

    Observable<CheckApplyFaceVerifyBean> requestCheckFaceAuthStatus();

    Observable<LabelBean> requestLabel(String type);

    Observable<CommonBean> requestRemoveBlack(String blackId);

    Observable<CommonBean> requestAddBlack(String blackMemberId);

    Observable<BlackHasBean> requestHasBlack(String blackMemberId, String operatorId);

    Observable<AnchorGiftReceivedBean> requestGiftLogReceived(String anchorId, String pageIndex);

    Observable<AnchorDetailBean> requestAnchorDetail(String targetId);

    /**
     * 是否关注
     *
     * @param anchorId
     * @return
     */
    Observable<CommonBean> requestFollowedHas(String anchorId);

    /**
     * @param anchorId
     * @param set      0是取消关注 1是关注
     * @return
     */
    Observable<CommonBean> requestFollowedSet(String anchorId, String set);

    /**
     * @param userId    用户ID
     * @param pageIndex 页码
     * @param type      1关注，2粉丝
     * @return
     */
    Observable<FansBean> requestFansOrFollowed(String userId, String pageIndex, String type);

    Observable<CommonBean> requestReport(String reportMemberId, String type, String reason, String operatorMobile);

    Observable<UserAuthBean> checkApplyAuth();

    Observable<UserInfoUpdateBean> userInfoUpdate(@FieldMap Map<String, String> map);

    Observable<STSCertBean> getSTSCert();

    Observable<PhotoListReleaseBean> releasePhoto(@FieldMap Map<String, String> map);

    Observable<PhotoListBean> queryPhoto(@FieldMap Map<String, String> map);

    Observable<CommonBean> deletePhoto(@FieldMap Map<String, String> map);

    Observable<VideoShowReleaseBean> releaseVideo(@FieldMap Map<String, String> map);

    Observable<VideoListBean> queryVideo(@FieldMap Map<String, String> map);

    Observable<CommonBean> deleteVideo(@FieldMap Map<String, String> map);

    Observable<CommonBean> setOnlineStatus(String onlineStatusID);

    Observable<BlackListBean> requestBlackList(String userId, String pageIndex);

    Observable<CommonBean> feedback(@FieldMap Map<String, String> map);

    /**
     * @param userId
     * @param pageIndex
     * @param descType  按1时间 2金额排序 默认1时间倒序
     * @return
     */
    Observable<BillListBean> requestBillList(String userId, String pageIndex, String descType);

    /**
     * @param type 类型(1 非苹果支付 , 2 苹果支付,4 门票支付)
     * @return
     */
    Observable<BalanceBean> requestBalance(String type);

    Observable<CommonBean> removeAllOrder();

    /**
     * @param id 单条记录ID
     * @return
     */
    Observable<CommonBean> removeSingleOrder(String id);


    Observable<CommonBean> generateAliPayOrder(Map<String, String> map);


    Observable<CommonBean> generateAliPayOrderH5(Map<String, String> map);


    Observable<CommonBean> generateAliPayOrderVIP(Map<String, String> map);

    Observable<CommonBean> generateWXPayOrder(Map<String, String> map);

    Observable<CommonBean> generateWXPayOrderH5(Map<String, String> map);

    Observable<CommonBean> generateWXPayOrderVIP(Map<String, String> map);

    Observable<CommonBean> liveCallShow(String anchorId);

    Observable<LiveApplyChatBean> liveApplyChat(String userId, String anchorId);


    Observable<LiveApplyChatBean> liveApplyChatAnchor(String id);

    /**
     * 主播离开房间
     *
     * @param roomId
     * @return
     */
    Observable<CommonBean> liveStopChatAnchor(String roomId);

    /**
     * 用户离开房间
     *
     * @param roomId
     * @return
     */

    Observable<CommonBean> liveStopChatMember(String roomId);

    /**
     * 主播保持在线认证
     *
     * @param roomId
     * @return
     */

    Observable<CommonBean> liveOnlineVerifyAnchor(String roomId);

    /**
     * 用户保持在线认证
     *
     * @param roomId
     * @return
     */
    Observable<CommonBean> liveOnlineVerifyMember(String roomId);

    /**
     * 主播接受聊天
     *
     * @param userId
     * @param memberId
     * @return
     */

    Observable<LiveAcceptChatBean> liveAcceptChat(String userId, String memberId);

    /**
     * 用户接受聊天
     *
     * @param anchorId
     * @return
     */
    Observable<LiveAcceptChatBean> liveAcceptChatMember(String anchorId);

    /**
     * 主播拒绝视频聊天申请
     *
     * @param userId
     * @param memberId
     * @return
     */
    Observable<CommonBean> liveRefuseChatAnchor(String userId, String memberId);

    /**
     * 用户拒绝视频聊天申请
     *
     * @param anchorId
     * @return
     */
    Observable<CommonBean> liveRefuseChatMember(String anchorId);

    /**
     * 用户取消拨打
     *
     * @param userId
     * @param anchorId
     * @return
     */
    Observable<CommonBean> liveCancelDialingMember(String userId, String anchorId);

    /**
     * 主播取消拨打
     *
     * @param memberId
     * @return
     */
    Observable<CommonBean> liveCancelDialing(String memberId);

    /**
     * 获取聊天页面话题库
     *
     * @return
     */
    Observable<TalkRepositoryBean> loadTalkRepository();

    Observable<ChatGiftBean> getAllGift();

    Observable<GiveGiftBean> sendGift(Map<String, String> map);

    Observable<BlackHasBean> realAuth(String authPhotoPath, String photoPath);

    Observable<BlackHasBean> beautyAuth();

    Observable<CommonBean> keepOnline();

    Observable<VideoPlayBean> requestVideoList(String memberId, String pageIndex);

    Observable<VideoPlayBean> requestVideoListRecommend(String pageIndex);

    Observable<LatestVisitorNumBean> latestVisitorTotal();

    /**
     * 访客
     *
     * @param pageIndex
     * @param type      wkd 我看的人,kwd 看我的人
     * @return
     */
    Observable<LatestVisitorBean> latestVisitor(String pageIndex, String type);

    Observable<TaskBean> queryTask();

    Observable<SignInBean> signIn();

    Observable<SignInBean> querySignInRecord();

    Observable<CommonBean> updateLocation(Map<String, String> map);

    Observable<CommonBean> aliPayGenerate(String exchangeId);

    Observable<CommonBean> aliPayH5(String exchangeId, String mobilePhone);

    Observable<CommonBean> aliPayGenerateVip(String vipInfoId);

    Observable<WeChatPayBean> weChatPayGenerate(String exchangeId);

    Observable<WeChatPayBean> weChatPayH5(String exchangeId, String mobilePhone);

    Observable<WeChatPayBean> weChatPayGenerateVip(String vipInfoId);


    /**
     * 任务奖励
     *
     * @param type      任务类型(新手任务 newbie,每日任务 daily)
     * @param pageIndex
     * @return
     */
    Observable<TaskAwardDailyBean> awardDaily(String type, String pageIndex);

    Observable<TaskAwardSignBean> awardSign(String pageIndex);


    Observable<IncomeChatBean> incomeIMChat(String pageIndex);


    Observable<IncomeGiftBean> incomeGift(String pageIndex);


    Observable<IncomeVideoChatBean> incomeVideoChat(String pageIndex);

    Observable<BillBean> billDetail(String pageIndex);

    Observable<AccountBean> getAccount();

    Observable<AccountMoneyBean> getAccountMoneyInfo(String userID);

    /**
     * 申请提现
     *
     * @param map
     * @return
     */
    Observable<BlackHasBean> getApplyWithdraw(Map<String, String> map);

    Observable<WithdrawRecordBean> getWithdrawRecord(String pageIndex);

    Observable<HelloBean> getSayHelloList();

    Observable<BlackHasBean> sayHello(String anchorIdList);

    Observable<BlackHasBean> greeted(String anchorId, String userId);

    Observable<CallRecordBean> getCallRecord(String pageIndex);

    Observable<NewGiftBagBean> getNewGift();

    Observable<ChatPeopleBean> getChatPeople();

    /**
     * 绑定手机号
     *
     * @param phoneNum
     * @param authCode
     * @return
     */
    Observable<BlackHasBean> bindPhone(String phoneNum, String authCode);

    /**
     * 水果包绑定手机号
     *
     * @param phoneNum
     * @return
     */
    Observable<BlackHasBean> bindPhoneFruit(String phoneNum, String code);

    Observable<CommonBean> accountOff();

    Observable<VersionBean> getVersion();

    Observable<VersionBean> getCurrentVersion();

    Observable<VersionBean> getLatestVersion();

    /**
     * 微信h5支付
     *
     * @param map
     * @return
     */
    Observable<WeChatH5Bean> getWeChatH5Pay(Map<String, String> map);

    Observable<WeChatH5Bean> getWeChatH5PayProduct(Map<String, String> map);

    /**
     * 查询微信H5支付结果
     *
     * @param orderNo
     * @return
     */
    Observable<WeChatH5PayResultBean> getWeChatH5PayResult(String orderNo);

    Observable<CommonBean> getVideoShowLike(String likeFlag, String videoId);

    /**
     * 视频秀评论列表
     *
     * @param pageIndex
     * @param videoId
     * @return
     */
    Observable<VideoCommentBean> getCommentList(String pageIndex, String videoId);

    /**
     * 跟评列表
     *
     * @param pageIndex
     * @param rootCommentId
     * @return
     */
    Observable<VideoSubCommentBean> getSubCommentList(String pageIndex, String rootCommentId);

    /**
     * 发布评论
     *
     * @param content
     * @param videoId
     * @return
     */
    Observable<VideoCommentReleaseBean> releaseComment(String content, String videoId);

    /**
     * 对评论进行跟评
     *
     * @param content
     * @param parentCommentId
     * @return
     */
    Observable<VideoSubCommentReleaseBean> releaseSubComment(String content, String parentCommentId);

    Observable<CommonBean> getVideoCommentLike(String likeFlag, String commentId);
}
